package com.example.understand_compose1.testcase_activity.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.understand_compose1.R



class RcvAdapter(
    private val context: Context,
    private val names: Array<String>,
    private val icons: Array<Int>,
    private val intros: Array<String>,
    private val listener: OnItemClickListener,
) : RecyclerView.Adapter<RcvAdapter.ViewHolder>() {
    //    TODO: 创建一个ViewHolder必须继承RecyclerView.ViewHolder,用于后续的数据绑定
    inner class ViewHolder(
        itemView: View,
        var iconIv: ImageView,
        var nameTv: TextView,
        var introTv: TextView,
    ) : RecyclerView.ViewHolder(itemView)


//    TODO: 必须复写, 创建ItemViewHolder，用于后续的数据绑定
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 1. Inflate the layout for the item
        val inflater = LayoutInflater.from(context)
        val view = inflater.inflate(R.layout.item_for_recycerview, parent, false) // Replace item_layout with your actual layout resource ID
        // 2. Initialize the views
        val iconIv: ImageView = view.findViewById(R.id.iv1) // Replace icon_iv with your actual view ID
        val nameTv: TextView = view.findViewById(R.id.tv1) // Replace name_tv with your actual view ID
        val introTv: TextView = view.findViewById(R.id.tv2) // Replace intro_tv with your actual view ID

        return ViewHolder(view, iconIv, nameTv, introTv)
    }

//    TODO: 必须复写，告诉RecyclerView列表上item的条数
    override fun getItemCount(): Int {
        return names.size
    }
// TODO: 必须复写, item的数据绑定
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        // Bind the data to the views
        holder.nameTv.text = names[position]
        holder.introTv.text = intros[position]
        holder.iconIv.setImageResource(icons[position])
        // TODO: 点击事件也是在这里写
        holder.itemView.setOnClickListener {
            listener.onItemClick(position)
        }
    }
}


interface OnItemClickListener {
    fun onItemClick(position: Int)
}

/*
在 Kotlin 中为 `RecyclerView` 实现点击事件，你可以通过在 `RecyclerView` 的适配器 (`Adapter`) 中为每个列表项设置点击监听器来实现。以下是具体的步骤和代码示例：

### 1. 定义点击事件接口

首先，定义一个点击事件接口，这样你可以在外部实现具体的点击事件逻辑：

```kotlin
interface OnItemClickListener {
    fun onItemClick(position: Int)
}
```

### 2. 修改 RecyclerView 适配器

在你的 `RecyclerView` 适配器中，添加一个 `OnItemClickListener` 类型的属性，并在 `onBindViewHolder` 方法中设置点击监听器：

```kotlin
class MyAdapter(private val items: List<String>, private val listener: OnItemClickListener) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // 如果你的列表项中有多个视图，可以在这里声明它们
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        // 设置数据到视图
        // ...

        // 设置点击事件
        holder.itemView.setOnClickListener {
            listener.onItemClick(position)
        }
    }

    override fun getItemCount() = items.size
}
```

### 3. 在 Activity 或 Fragment 中设置适配器和监听器

在你的 `Activity` 或 `Fragment` 中，创建适配器实例并设置点击监听器：

```kotlin
class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my)

        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        val items = listOf("Item 1", "Item 2", "Item 3") // 你的数据列表

        // 创建适配器实例并设置点击监听器
        val adapter = MyAdapter(items, object : OnItemClickListener {
            override fun onItemClick(position: Int) {
                // 处理点击事件，例如显示一个 Toast
                Toast.makeText(this@MyActivity, "Item clicked: $position", Toast.LENGTH_SHORT).show()
            }
        })

        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = adapter
    }
}
```

在这个例子中，`MyAdapter` 接收一个 `OnItemClickListener` 作为构造参数，这样你就可以在适配器外部定义点击事件的处理逻辑。在 `Activity` 或 `Fragment` 中，你实现了 `OnItemClickListener` 接口，并提供了具体的点击事件处理逻辑。

这种方法的好处是它将点击事件的处理逻辑从适配器中分离出来，使得适配器更加通用和可重用。同时，它也遵循了关注点分离的原则，使得代码更加清晰和易于维护。

 */